package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.Conexion;
import bean.Ubicacion;

public class TUBICDAO {

	public int registrarUbicacion(Ubicacion ubicacion) throws SQLException {
		PreparedStatement pstm = Conexion
				.obtenerConexion()
				.prepareStatement(
						""
								+ "insert into prodtecni.tubic (UBALMA,UBALMF,UBANAQ,UBPRIO,UBFILA,UBCOLU,UBARTI,UBCANT,UBUCRE,UBFCRE,UBHCRE,UBPISO) values (?,?,?,?,?,?,?,?,?,?,?,?)");
		pstm.setString(1, ubicacion.getUBALMA());
		pstm.setString(2, ubicacion.getUBALMF());
		pstm.setString(3, ubicacion.getUBANAQ());
		pstm.setInt(4, ubicacion.getUBPRIO());
		pstm.setString(5, ubicacion.getUBFILA());
		pstm.setString(6, ubicacion.getUBCOLU());
		pstm.setString(7, ubicacion.getUBARTI());
		pstm.setDouble(8, ubicacion.getUBCANT());
		pstm.setString(9, ubicacion.getUBUCRE());
		pstm.setInt(10, ubicacion.getUBFCRE());
		pstm.setInt(11, ubicacion.getUBHCRE());
		pstm.setString(12, ubicacion.getUBPISO());
		int result = pstm.executeUpdate();
		pstm.close();
		return result;
	}

	public int actualizarUbicacion(Ubicacion ubicacion) throws SQLException {
		PreparedStatement pstm = Conexion
				.obtenerConexion()
				.prepareStatement(
					"update prodtecni.tubic set UBPRIO=?,UBCANT=?,UBUMOD=?,UBFMOD=?,UBHMOD=? where UBALMA=? and UBALMF=? and UBARTI=? and UBANAQ=? and UBFILA=? and UBCOLU=? and UBPISO=?");
		pstm.setInt(1, ubicacion.getUBPRIO());
		pstm.setDouble(2, ubicacion.getUBCANT());
		pstm.setString(3, ubicacion.getUBUMOD());
		pstm.setInt(4, ubicacion.getUBFMOD());
		pstm.setInt(5, ubicacion.getUBHMOD());
		pstm.setString(6, ubicacion.getUBALMA());
		pstm.setString(7, ubicacion.getUBALMF());
		pstm.setString(8, ubicacion.getUBARTI());
		pstm.setString(9, ubicacion.getUBANAQ());
		pstm.setString(10, ubicacion.getUBFILA());
		pstm.setString(11, ubicacion.getUBCOLU());
		pstm.setString(12, ubicacion.getUBPISO());
		int result = pstm.executeUpdate();
		pstm.close();
		return result;
	}

	public Ubicacion getStock(Ubicacion ubicacion) throws SQLException {
		Ubicacion obj = null;
		PreparedStatement pstm = Conexion
				.obtenerConexion()
				.prepareStatement(
						"select UBALMA,UBALMF,UBARTI,UBANAQ,UBFILA,UBCOLU,UBCANT,UBPRIO,UBPISO from prodtecni.tubic where UBALMA=? and UBALMF=? and UBARTI=? and UBANAQ=? and UBFILA=? and UBCOLU=? and UBPISO=?  ");
		pstm.setString(1, ubicacion.getUBALMA());
		pstm.setString(2, ubicacion.getUBALMF());
		pstm.setString(3, ubicacion.getUBARTI());
		pstm.setString(4, ubicacion.getUBANAQ());
		pstm.setString(5, ubicacion.getUBFILA());
		pstm.setString(6, ubicacion.getUBCOLU());
		pstm.setString(7, ubicacion.getUBPISO());
		ResultSet rs = pstm.executeQuery();
		if (rs.next()) {
			obj = new Ubicacion();
			obj.setUBALMA(rs.getString("UBALMA"));
			obj.setUBALMF(rs.getString("UBALMF"));
			obj.setUBARTI(rs.getString("UBARTI"));
			obj.setUBANAQ(rs.getString("UBANAQ"));
			obj.setUBFILA(rs.getString("UBFILA"));
			obj.setUBCOLU(rs.getString("UBCOLU"));
			obj.setUBCANT(rs.getDouble("UBCANT"));
			obj.setUBPRIO(rs.getInt("UBPRIO"));
			obj.setUBPISO(rs.getString("UBPISO"));
		}
		rs.close();
		pstm.close();
		return obj;
	}

	public List<Ubicacion> buscarUbicacion(Ubicacion ubicacion)
			throws SQLException {
		List<Ubicacion> listado = new ArrayList<Ubicacion>();
		String sql = "";
		if (!ubicacion.getUBALMA().isEmpty()) {
			sql+="where UBALMA = ? ";
		}
		if (!ubicacion.getUBALMF().isEmpty()) {
			if (sql.isEmpty()) {
				sql+="where UBALMF = ? ";
			} else {
				sql+="and UBALMF = ? ";
			}
		}
		if (!ubicacion.getUBPISO().isEmpty()) {
			if (sql.isEmpty()) {
				sql+="where UBPISO like upper(?) || '%' ";
			} else {
				sql+="and UBPISO like upper(?) || '%' ";
			}
		}
		if (!ubicacion.getUBANAQ().isEmpty()) {
			if (sql.isEmpty()) {
				sql+="where UBANAQ like upper(?) || '%' ";
			} else {
				sql+="and UBANAQ like upper(?) || '%' ";
			}
		}
		if (!ubicacion.getUBARTI().isEmpty()) {
			if (sql.isEmpty()) {
				sql+="where UBARTI like upper(?) || '%' ";
			} else {
				sql+="and UBARTI like upper(?) || '%' ";
			}
		}
		int parametro = 0;
		PreparedStatement pstm = Conexion.obtenerConexion().prepareStatement(
				"select * from prodtecni.tubic " + sql);
		if (!ubicacion.getUBALMA().isEmpty()) {
			pstm.setString(++parametro, ubicacion.getUBALMA());
		}
		if (!ubicacion.getUBALMF().isEmpty()) {
			pstm.setString(++parametro, ubicacion.getUBALMF());
		}
		if (!ubicacion.getUBPISO().isEmpty()) {
			pstm.setString(++parametro, ubicacion.getUBPISO());
		}
		if (!ubicacion.getUBANAQ().isEmpty()) {
			pstm.setString(++parametro, ubicacion.getUBANAQ());
		}
		if (!ubicacion.getUBARTI().isEmpty()) {
			pstm.setString(++parametro, ubicacion.getUBARTI());
		}
		ResultSet rs = pstm.executeQuery();
		while (rs.next()) {
			Ubicacion obj = new Ubicacion();
			obj.setUBALMA(rs.getString("UBALMA"));
			obj.setUBALMF(rs.getString("UBALMF"));
			obj.setUBANAQ(rs.getString("UBANAQ"));
			obj.setUBPISO(rs.getString("UBPISO"));
			obj.setUBFILA(rs.getString("UBFILA"));
			obj.setUBCOLU(rs.getString("UBCOLU"));
			obj.setUBARTI(rs.getString("UBARTI"));
			obj.setUBPRIO(rs.getInt("UBPRIO"));
			obj.setUBCANT(rs.getDouble("UBCANT"));
			listado.add(obj);
		}
		rs.close();
		pstm.close();
		return listado;
	}
}
